BeginPackage["MRData`",{"MathMR`"}]
(*Math Link Path*)
(*
$MRMathLinkPath="/home/nzhao/research/workspace/MathMRLib/mathlink/";
$MRDocumentationPath="/home/nzhao/research/workspace/MathMRLib/MathMR/"<>"Documentation/English/";
*)


(*Math Const*)
X={{0,1},{1,0}};
Y={{0,-I},{I,0}};
Z={{1,0},{0,-1}};
Id={{1,0},{0,1}};
U={{0,1},{0,0}};
W={{0,0},{1,0}};

SpinOperatorX[j_] := 
	Module[{res, dim, lower},
		dim = 2 * j + 1;
		
		lower = Table[
				If[m==n+1,
					1/2*Sqrt[j*(j+1) - m*n ],
					0
				]
				,{m,-j,j}
				,{n,-j,j}
			];
		res = lower + Transpose[lower];		
		Return[res];
	]/;IntegerQ[2*j]

SpinOperatorY[j_] := 
	Module[{res, dim, lower},
		dim = 2 * j + 1;
		lower = Table[
				If[m==n+1,
					I/2*Sqrt[j*(j+1) - m*n ],
					0
				]
				,{m,-j,j}
				,{n,-j,j}
			];
		res = lower + ConjugateTranspose[lower];
		Return[res];
		]/;IntegerQ[2*j]
	
SpinOperatorZ[j_] := 
	Module[{res},
		res = DiagonalMatrix[Range[j,-j,-1]];		
		Return[res];
	]/;IntegerQ[2*j]

$UDDTimingList=Table[Sin[(j \[Pi])/(2n+2)]^2,{n,1,200},{j,0,n+1}]//N;
$CPMGTimingList=Table[{0.0}~Join~Table[(2j-1)/(2 n),{j,1,n}]~Join~{1.},{n,1,200}]//N;

(*Phys Const*)
$Angstrom=10^-10;
$Mu0=4*Pi*10^-7;
$Hbar=1.054571596*10^-34;

$GammaE=-1.760859794*10^11;(*Electron spin*)
$GammaC13=6.726149871*10^7;(*Carbon-13*)
$GammaN14=1.9338*10^7(*Nitrogen-14*)
$GammaN15=-2.7116*10^7(*Nitrogen-15*)
$GammaH=2.67522212*10^8(*Proton*)

ElementRule={"E"->{1/2,$GammaE},"C"->{1/2,$GammaC13}, "N"->{1,$GammaN14},"H"->{1/2,$GammaH}};

(*Lattice*)
$e1={1,0,0};
$e2={0,1,0};
$e3={0,0,1};


(*Diamond lattice*)
$DiamondLatticeConst=3.57(*Angstrom*);

$DiamondR0={0,0,0}/4;
$DiamondR1={1,1,1}/4;
$DiamondR2={2,2,0}/4;
$DiamondR3={3,3,1}/4;
$DiamondR4={2,0,2}/4;
$DiamondR5={0,2,2}/4;
$DiamondR6={3,1,3}/4;
$DiamondR7={1,3,3}/4;
$DiamondRList={$DiamondR0,$DiamondR1,$DiamondR2,$DiamondR3,$DiamondR4,$DiamondR5,$DiamondR6,$DiamondR7};

$DiamondDirList=Normalize/@{{-1,-1,-1},{1,1,-1},{1,-1,1},{-1,1,1}}*Sqrt[3]/4;
$DiamondBonds1=Table[{$DiamondR1,$DiamondR1+$DiamondDirList[[i]]},{i,1,4}];
$DiamondBonds2=Table[{$DiamondR3,$DiamondR3+$DiamondDirList[[i]]},{i,1,4}];
$DiamondBonds3=Table[{$DiamondR6,$DiamondR6+$DiamondDirList[[i]]},{i,1,4}];
$DiamondBonds4=Table[{$DiamondR7,$DiamondR7+$DiamondDirList[[i]]},{i,1,4}];

$DiamondPairList=$DiamondBonds1~Join~$DiamondBonds2~Join~$DiamondBonds3~Join~$DiamondBonds4;
$DiamondPairList1={$DiamondBonds1,$DiamondBonds2,$DiamondBonds3,$DiamondBonds4};

$Diamond3DirList=Subsets[$DiamondDirList,{2}];
$DiamondTriSpin1=Table[{$DiamondR1+$Diamond3DirList[[i,1]],$DiamondR1,$DiamondR1+$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin2=Table[{$DiamondR3+$Diamond3DirList[[i,1]],$DiamondR3,$DiamondR3+$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin3=Table[{$DiamondR6+$Diamond3DirList[[i,1]],$DiamondR6,$DiamondR6+$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin4=Table[{$DiamondR7+$Diamond3DirList[[i,1]],$DiamondR7,$DiamondR7+$Diamond3DirList[[i,2]]},{i,1,6}];

$DiamondTriSpin5=Table[{$DiamondR0-$Diamond3DirList[[i,1]],$DiamondR0,$DiamondR0-$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin6=Table[{$DiamondR2-$Diamond3DirList[[i,1]],$DiamondR2,$DiamondR2-$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin7=Table[{$DiamondR4-$Diamond3DirList[[i,1]],$DiamondR4,$DiamondR4-$Diamond3DirList[[i,2]]},{i,1,6}];
$DiamondTriSpin8=Table[{$DiamondR5-$Diamond3DirList[[i,1]],$DiamondR5,$DiamondR5-$Diamond3DirList[[i,2]]},{i,1,6}];

$DiamondTriSpinList={$DiamondTriSpin1,$DiamondTriSpin2,$DiamondTriSpin3,$DiamondTriSpin4,$DiamondTriSpin5,$DiamondTriSpin6,$DiamondTriSpin7,$DiamondTriSpin8};

(*SiC lattice*)
$SiCUnitVectA = {1, 0, 0};
$SiCUnitVectB = {1/2, Sqrt[3]/2, 0};
$SiCShift = {0, 0, 3/4};

$2HSiCconstA = 3.0730; 
$2HSiCconstC = 5.0480;
$2HSiCLayer = {{0, 0, 0}, {1/2, Sqrt[3]/6, 0}};(*"AB"*)
$2HSiCLayerNumber = 2;

$4HSiCconstA = 3.0730; 
$4HSiCconstC = 10.053;
$4HSiCLayer = {{0, 0, 0}, {1/2, Sqrt[3]/6, 0}, {1/2, -Sqrt[3]/6, 0}, {1/2, Sqrt[3]/6, 0}};(*ABCB*)
$4HSiCLayerNumber = 4;

$6HSiCconstA = 3.0730; 
$6HSiCconstC = 15.11;
$6HSiCLayer = {{0, 0, 0}, {1/2, Sqrt[3]/6, 0}, {1/2, -Sqrt[3]/6, 0}, {0, 0, 0}, {1/2, -Sqrt[3]/6, 0}, {1/2, Sqrt[3]/6, 0}};(*ABCACB*)
$6HSiCLayerNumber = 6;

(*Material*)
$DiamondNatureAbundance=0.011;
$SiliconNatureAbundance=0.046832;

EndPackage[]